function Slider(){
	
}


/**
 * <p>
 * Ao usar esse metodo você devera criar uma  variavel  json e colocar as opçoes disponiveis do Spinner 
 * e em seguida passar os atributos que é o seletor e o json que você criou para chamar as opções desejadas.</p>
 * <b>Exemplo:</b>
 * 
 *<p> var json = {</p>
 *			
 *<p>			animate: "fast",</p>
 *<p>			disabled: false,</p>
 *<p>			max: 100,</p>
 *<p>			min: 0,</p>
 *<p>			orientation: "horizontal",</p>
 *<p>			range: false,</p>
 *<p>			step: 1</p>
 *<p>     	//	value: 5</p>
 *<p>		//	values: [ 0, 100 ]</p>			
 *<p> };
 *      <p>chamando o metodo de configurações</p>
 *<p>	slider.gerarSlider("#formulario #slider", json);</p>
 * 
 * <b>animate:</b>
 * <p>Se a deslizar a alça sem problemas quando o usuário clica no rasto slider. Também aceita qualquer duração animação válido.</p>
 * <p> Booleano: Quando definido como verdadeiro , a alça irá animar com a duração padrão .
 *    String: O nome de uma velocidade , como " rápido " ou " lento" .
 *    Número: A duração da animação , em milissegundos.
 * </p>
 * 
 * <b>disabled:</b>
 * <p>Desabilita o controle deslizante se definido como verdadeiro .</p>
 * 
 * <b>max:</b>
 * <p>O valor máximo do cursor .</p>
 * 
 * <b>min:</b>
 * <p>O valor minimo do cursor .</p>
 * 
 * <b>orientation:</b>
 * <p>Determina se as alças de controle deslizante mover horizontalmente (min na esquerda , max à direita) ou vertical (min na parte inferior, max na parte superior) . 
 * Valores possíveis: "horizontal" , "vertical" </p>
 * 
 * <b>range:</b>
 *<p> Se o deslizador representa uma gama .</p>
 *<p>   Booleano: Se definido como verdadeiro , o controle deslizante irá detectar se você tem duas alças e criar um elemento de gama styleable entre estes dois.
 *      String: Ou "min" ou "max". A min gama vai desde os deslizantes min para uma alça. A escala máxima vai de um identificador para o controle deslizante max .</p>
 *      
 * <b>step:</b>
 * <p>Determina o tamanho ou a quantidade de cada intervalo ou passo o controle deslizante leva entre o mínimo eo máximo . A faixa de valor completa especificada do controle deslizante ( max - min) deve ser divisível pelo passo .</p>
 * 
 * <b>value:</b>
 * <p>Determina o valor do controle deslizante , se há apenas uma alça. Se houver mais de uma pega, determina o valor do primeiro identificador .</p>
 * 
 * <b>values:</b>
 * <p>Esta opção pode ser usado para especificar vários identificadores . Se a opção de intervalo é definido como verdadeiro, o comprimento dos valores deve ser 2 .</p>
 * 
 * @param seletor Aqui você passa o seletor do sua div 
 * @param config aqui você passa um json com as opçoes.
 */
Slider.prototype.gerarSlider = function(seletor, config){

	var auxiliar = {};
	
	
	if(config){
		
		//***************** animate ********************
		if(config.animate != undefined){
			
			auxiliar = $.extend(auxiliar,{animate:config.animate});
			
		}else{
			
			auxiliar = $.extend(auxiliar,{animate:false});
		}
		
		//*************** disabled ********************
		if(config.disabled != undefined){
			
			auxiliar = $.extend(auxiliar,{disabled:config.disabled});
			
		}else{
			
			auxiliar = $.extend(auxiliar,{disabled:false});
		}
		
		//*************** orientation *****************
		if(config.orientation != undefined){
			
			auxiliar = $.extend(auxiliar,{orientation:config.orientation});
			
		}else{
			
			auxiliar = $.extend(auxiliar,{orientation:"horizontal"});
		}
		
		//******************** max ********************
		if(config.max != undefined){
			
			auxiliar = $.extend(auxiliar,{max:config.max});
		}else{
			
			auxiliar = $.extend(auxiliar,{max:100});
		}
		
		//******************** min ********************
		if(config.min != undefined){
			
			auxiliar = $.extend(auxiliar,{min:config.min});
		}else{
			
			auxiliar = $.extend(auxiliar,{min:0});
		}
		
		//*************** range *****************
		if(config.range != undefined){
			
			auxiliar = $.extend(auxiliar,{range:config.range});
		}else{
			
			auxiliar = $.extend(auxiliar,{range:false});
		}
		
		//******************** value ********************
		if(config.value != undefined){
			
			auxiliar = $.extend(auxiliar,{value:config.value});
		}else{
			auxiliar = $.extend(auxiliar,{value:0});
		}
		
		//******************** values ********************
		if(config.values != undefined){
			
			auxiliar = $.extend(auxiliar,{values:config.values});
		}else{
			auxiliar = $.extend(auxiliar,{values:null});
		}
		
		//******************** step ********************
		if(config.step != undefined){
			
			auxiliar = $.extend(auxiliar,{step:config.step});
		}else{
			
			auxiliar = $.extend(auxiliar,{step:1});
		}
		
		$(seletor).slider(auxiliar);
		
		}
		// Caso ele não passe nada aqui será o default ********
		else{

			auxiliar = $.extend(auxiliar,{animate:false});
			auxiliar = $.extend(auxiliar,{disabled:false});
			auxiliar = $.extend(auxiliar,{orientation:"horizontal"});
			auxiliar = $.extend(auxiliar,{max:100});
			auxiliar = $.extend(auxiliar,{min:0});
			auxiliar = $.extend(auxiliar,{range:false});
			auxiliar = $.extend(auxiliar,{value:0});
			auxiliar = $.extend(auxiliar,{values:null});
			auxiliar = $.extend(auxiliar,{step:1});
			
			$(seletor).slider(auxiliar);
		}
	
	
};

//************************** Metodos *******************************
/**
 * Essa função é chamada quando haver um input text para trocar o valor conforme o slider for trocado tbm.
 * Para a chamada dessa função é necessario haver um campo input text
 * 
 *  Ele recebe dois parâmetros um é o seletor do slider e outro é o seletor do input text.
 */	
Slider.prototype.chanceSlider = function(seletor,seletorText){
	
	var sliderCriado = $(seletor).slider({
		
		slide: function(event,ui){

			$(seletorText).val(ui.value);
			
		},
		
	});
	
	$(seletorText).val($(seletor).slider("value"));
};

//Destroy
/**
 * Remove a funcionalidade giratório completamente . Isto irá devolver o elemento de volta ao seu estado pré-init.
 */
Slider.prototype.destroySlider = function(seletor){
	
	$(seletor).slider("destroy");
};

//Disable
/**
 * Desabilita o controle giratório .
 */
Slider.prototype.desabilitarSlider = function(seletor){
	
	$(seletor).slider("disable");
};

//Enable
/**
 * Permite o controle giratório .
 */
Slider.prototype.enableSlider = function(seletor){
	
	$(seletor).slider("enable");
};

//Instance
/**
 * Recupera instância do objeto do girador . Se o elemento não tem um exemplo associado , indefinido é devolvido .
 *Ao contrário de outros métodos de widget, instância ( ) é seguro para chamar em qualquer elemento após o plugin girador foi carregado.
 */
Slider.prototype.instanceSlider = function(seletor){
	
	$(seletor).slider("instance");
};

/**
 * Esse metodo não deixa ir vazio, não deixa ele
 * @param seletor aqui você ira passar como param o selector do campo txt(input)
 */
Slider.prototype.validacaoCampoSliderTxt = function(seletor){
	
	//evento Keypress para não deixaro usuario digitar String
	$(seletor).on('keypress', function(evento){

		slider.campoNumericoApenas(seletor, evento);
		
	});
	
	//evento blur
	$(seletor).on('blur', function() {
		
		//Ao perder o foco do campo ele irá verificar sé é vazio ou não.
		if($.trim($(this).val()) == ''){
			
			
			alert(" Não é possivel deixar vazio o campo.");
		
		}
		
		if(isNaN($.trim($(this).val()))){

			var numero = parseInt($.trim($(this).val()));
			
			alert($.trim($(this).val()) + '  não é um numero valido');
		}
		
		if(typeof numero == 'string'){
			
				alert('Digite um numero valido');
		}

	});
};

/**
 * função que permite só numeros se digitar além disso o evento é parado.
 */
Slider.prototype.campoNumericoApenas = function(campo, evento){
	
	var tecla = evento.keyCode || evento.which;
	
	if(tecla !=8){
		
		if(tecla < 48 || tecla > 57){
			
			evento.preventDefault();
		}
	
	}
	
};

var slider = new Slider();